package com.framework.view.indicator.configs;

import android.graphics.Color;

import androidx.annotation.ColorInt;
import androidx.annotation.Dimension;

/**
 * 角标配置
 *
 * @author liangzx
 * @version 1.0
 * @time 2020-01-14 10:38
 **/
public class BadgeConfig {

    /**
     * 角标锚点位置
     */
    private int anchor;
    /**
     * 横向偏移量
     */
    private float offsetX;
    /**
     * 竖向偏移量
     */
    private float offsetY;
    /**
     * 角标颜色
     */
    private int badgeColor;
    /**
     * 角标字体颜色
     */
    private int txtColor;
    /**
     * 角标字体大小
     */
    private float txtSize;
    /**
     * 圆形半径
     */
    private float radius;
    /**
     * 圆角半径
     */
    private float cornerRadius;
    /**
     * 是否显示数字
     */
    private boolean isShowNumber;
    /**
     * 宽度不够是否自动拉伸
     */
    private boolean autoStretch;
    /**
     * 边框宽度
     */
    private float strokeWidth;
    /**
     * 边框颜色
     */
    private int strokeColor;
    /**
     * 文字左右间距
     */
    private int txtPendingLR;

    private BadgeConfig() {
    }

    public static BadgeConfig factory() {
        BadgeConfig config = new BadgeConfig();
        config.setAnchor(BadgeAnchor.CONTENT_TOP | BadgeAnchor.CONTENT_RIGHT)
                .setBadgeColor(Color.RED)
                .setTxtColor(Color.WHITE)
                .setTxtPendingLR(3)
                .setShowNumber(true)
                .setAutoStretch(true)
                .setCornerRadius(10)
                .setTxtSize(10)
                .setRadius(10);
        return config;
    }

    /**
     * 设置锚点方向<br>
     * 填充{@link BadgeAnchor}的值
     *
     * @param anchor
     * @return
     */
    public BadgeConfig setAnchor(int anchor) {
        this.anchor = anchor;
        return this;
    }

    /**
     * 设置横向偏移量
     *
     * @param offsetX
     * @return
     */
    public BadgeConfig setOffsetX(float offsetX) {
        this.offsetX = offsetX;
        return this;
    }

    /**
     * 设置竖向偏移量
     *
     * @param offsetY
     * @return
     */
    public BadgeConfig setOffsetY(float offsetY) {
        this.offsetY = offsetY;
        return this;
    }

    /**
     * 设置角标颜色
     *
     * @param badgeColor
     * @return
     */
    public BadgeConfig setBadgeColor(@ColorInt int badgeColor) {
        this.badgeColor = badgeColor;
        return this;
    }

    /**
     * 设置文本字体颜色
     *
     * @param txtColor
     * @return
     */
    public BadgeConfig setTxtColor(@ColorInt int txtColor) {
        this.txtColor = txtColor;
        return this;
    }

    /**
     * 设置文本字体大小
     *
     * @param txtSize
     * @return
     */
    public BadgeConfig setTxtSize(@Dimension float txtSize) {
        this.txtSize = txtSize;
        return this;
    }

    /**
     * 设置文字左右间距
     *
     * @param txtPendingLR
     * @return
     */
    public BadgeConfig setTxtPendingLR(@Dimension int txtPendingLR) {
        this.txtPendingLR = txtPendingLR;
        return this;
    }

    /**
     * 设置半径
     *
     * @param radius
     * @return
     */
    public BadgeConfig setRadius(@Dimension float radius) {
        this.radius = radius;
        return this;
    }

    /**
     * 设置是否显示数字
     *
     * @param showNumber
     * @return
     */
    public BadgeConfig setShowNumber(boolean showNumber) {
        isShowNumber = showNumber;
        return this;
    }

    /**
     * 设置圆角半径
     *
     * @param cornerRadius
     * @return
     */
    public BadgeConfig setCornerRadius(float cornerRadius) {
        this.cornerRadius = cornerRadius;
        return this;
    }

    /**
     * 设置宽度不够时是否自动拉伸
     *
     * @param autoStretch
     * @return
     */
    public BadgeConfig setAutoStretch(boolean autoStretch) {
        this.autoStretch = autoStretch;
        return this;
    }

    /**
     * 设置边框
     *
     * @param strokeWidth 边框宽度
     * @param strokeColor 边框颜色
     * @return
     */
    public BadgeConfig setStroke(@Dimension float strokeWidth, @ColorInt int strokeColor) {
        this.strokeWidth = strokeWidth;
        this.strokeColor = strokeColor;
        return this;
    }

    /**
     * 是否显示数字
     *
     * @return
     */
    public boolean isShowNumber() {
        return isShowNumber;
    }

    /**
     * 是否宽度不够自动拉伸
     *
     * @return
     */
    public boolean isAutoStretch() {
        return autoStretch;
    }

    /**
     * 获取边框宽度
     *
     * @return
     */
    public float getStrokeWidth() {
        return strokeWidth;
    }

    /**
     * 获取边框颜色
     *
     * @return
     */
    public int getStrokeColor() {
        return strokeColor;
    }

    /**
     * 获取半径
     *
     * @return
     */
    public float getRadius() {
        return radius;
    }

    /**
     * 获取圆角半径
     *
     * @return
     */
    public float getCornerRadius() {
        return cornerRadius;
    }

    /**
     * 获取锚点位置
     *
     * @return
     */
    public int getAnchor() {
        return anchor;
    }

    /**
     * 获取横向偏移量
     *
     * @return
     */
    public float getOffsetX() {
        return offsetX;
    }

    /**
     * 获取竖向偏移量
     *
     * @return
     */
    public float getOffsetY() {
        return offsetY;
    }

    /**
     * 获取角标颜色
     *
     * @return
     */
    public int getBadgeColor() {
        return badgeColor;
    }

    /**
     * 获取字体颜色
     *
     * @return
     */
    public int getTxtColor() {
        return txtColor;
    }

    /**
     * 获取字体大小
     *
     * @return
     */
    public float getTxtSize() {
        return txtSize;
    }

    /**
     * 获取文字左右间距
     *
     * @return
     */
    public int getTxtPendingLR() {
        return txtPendingLR;
    }

    /**
     * 锚点位置
     */
    public interface BadgeAnchor {
        /**
         * 整个区域左边
         */
        int LEFT = 0x0001;
        /**
         * 整个区域上边
         */
        int TOP = 0x0002;
        /**
         * 整个区域右边
         */
        int RIGHT = 0x0004;
        /**
         * 整个区域下边
         */
        int BOTTOM = 0x0008;
        /**
         * 具体内容区域左边
         */
        int CONTENT_LEFT = 0x0010;
        /**
         * 具体内容区域上边
         */
        int CONTENT_TOP = 0x0020;
        /**
         * 具体内容区域右边
         */
        int CONTENT_RIGHT = 0x0040;
        /**
         * 具体内容区域下边
         */
        int CONTENT_BOTTOM = 0x0080;
        /**
         * 整个区域横向中间
         */
        int CENTER_X = 0x1000;
        /**
         * 整个区域竖向中间
         */
        int CENTER_Y = 0x4000;
        /**
         * 左边空隙横向中间
         */
        int LEFT_EDGE_CENTER_X = 0x0100;
        /**
         * 上边空隙竖向中间
         */
        int TOP_EDGE_CENTER_Y = 0x0200;
        /**
         * 右边空隙横向中间
         */
        int RIGHT_EDGE_CENTER_X = 0x0400;
        /**
         * 下边空隙竖向中间
         */
        int BOTTOM_EDGE_CENTER_Y = 0x0800;
    }
}
